import logUtils from "./logUtils.js";
import injectJsError from "../injectJsError/injectJsError";
import log from 'loglevel';

log.setDefaultLevel(log.levels.INFO)
// 添加一个辅助函数，用于获取调用日志方法的行号
// logUtils.addPlugin()
const logWithPlugin = {
  getLogger: logUtils.getLogger,
  // 添加一个辅助函数，用于获取调用日志方法的行号
  getCurrentLine() {
    const error = new Error();
    const lines = error.stack.split('\n');
    // 假设堆栈的第一条是我们调用getCurrentLine的地方，第二条是我们调用logger的方法的地方
    // 根据实际情况可能需要调整索引
    const callerLine = lines[2].match(/\((.*):(\d+):(\d+)\)/);
    if (callerLine) {
      return parseInt(callerLine[2], 10) - 8; // 返回行号
    }
    return 0;
  },
  // 添加一个辅助函数，用于获取调用日志方法的文件名称
  getFileName() {
    const error = new Error();
    const lines = error.stack.split('\n');
    const callerLine = lines[2].match(/\((.*):(\d+):(\d+)\)/);
    if (callerLine) {
      return callerLine[1]
    }
    return '';
  }
}
let ulog = logWithPlugin.getLogger(logWithPlugin.getFileName())
ulog.info(logWithPlugin.getCurrentLine(), '开始进入页面')
ulog.info(logWithPlugin.getCurrentLine(), '添加全局错误捕获')
injectJsError((log = {}) => {
  let filename = log.filename || '未知文件错误'
  let row = 1
  if (log.position && log.position.row) {
    row = log.position.row
  }
  let message = log.message
  let stack = log.stack
  let errorType = log.errorType
  logWithPlugin.getLogger(filename).error(row, [
    message,
    errorType,
    stack
  ].join(','))
})
export default logWithPlugin
